﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Memoria
{
    public partial class Form1 : Form
    {

        private int cont = 0;               //diz quantas cartas foram selecionadas
        private int j1 = 0;                 //marca a potuação dos jogadores.
        private int j2 = 0; 
        private PictureBox carta1, carta2;  //cartas selecionadas
        private int x1, x2, y1, y2;         //coordenadas das cartas selecionadas
        private int[,] tab = new int[5,6];  //tabela 5 x 6
        private bool jog=false;             //indica se eh o jogador 1 ou 2 que esta jogando (devia ser int?)

        //funcao para trocar de jogador
        public void trocaJog()
        {
            jog = !jog; //inverte
            if (jog)
            {
                joga1.Image = imageList1.Images[16];
                joga2.Image = imageList1.Images[19]; //Ken
            }
            else
            {
                joga1.Image = imageList1.Images[18]; //Barbie
                joga2.Image = imageList1.Images[17];
            }
        }

        public void VerificaFim() {
            if ((j1 + j2) == 15 && j1 > j2) {
                MessageBox.Show("Fim de jogo! \nVencedor: Barbie! \nPontuação da Barbie: "+ j1 + "\nPontuação do Ken: " +j2);
            }
            else if ((j1 + j2) == 15 && j2 > j1)
            {
                MessageBox.Show("Fim de jogo! \nVencedor: Ken! \nPontuação da Barbie: " + j1 + "\nPontuação do Ken: " + j2);
            }
        }


        //Verifica se a jogada esta correta. Recebe as coordenadas da carta
        public void Verifica(PictureBox carta, int x, int y)
        {

            //nenhuma carta selecionada
            if (cont == 0)
            {
                //mudar a imagem da carta que eu cliquei
                carta.Image = imageList1.Images[tab[x,y]]; //pega a imagem escondida
                carta1 = carta;
                carta1.Enabled = false;
                x1 = x; y1 = y; //guarda as coordenadas
                cont++;
                return;
            }

            //uma carta selecionada
            else if (cont == 1)
            {
                carta.Image = imageList1.Images[tab[x, y]]; //pega a imagem escondida
                carta2 = carta;
                carta2.Enabled = false;
                x2 = x; y2 = y;

                //caso tenham o mesmo valor
                if (tab[x1, y1] == tab[x2, y2])
                {
                    //MessageBox.Show("Aeeew, as cartas sao iguais!");
                    //nao consigo mais mexer nas cartas com elas desnabladas
                    if (jog){
                        j2++; //potuacao do Ken
                        pont2.Text = "pontos: "+j2.ToString();
                    }else{
                        j1++; //potuacao da Barbie
                        pont1.Text = "pontos: "+j1.ToString();
                    }
                    VerificaFim();
                }
                else
                {
                    //pausa por 1s para poder visualizar a segunda carta clicada
                    Thread.Sleep(1000);
                    carta1.Image = imageList1.Images[0]; //imagem da carta virada
                    carta2.Image = imageList1.Images[0]; //imagem da carta virada
                    //pode voltar a mexer com as cartas
                    carta1.Enabled = true;
                    carta2.Enabled = true;
                    trocaJog(); //troca o jogador
                }

                cont= 0;
                return;
            }

        }

        //inicia as cartas e embaralha
        public Form1()
        {
            //inicia todas as cartas (carta virada)
            int i, j;
            for (i = 0; i < 5; i++) {
                for (j = 0; j < 6; j++) {
                    tab[i, j] = 0;                
                }
            }

            i = j = 0;
            //embaralha as cartas
            for (int cont = 1;  cont < 16; cont++) {
                //duas cartas devem iguais
                for (int par = 0; par < 2; par++)
                {
                   do{
                        Random random = new Random();
                        //gera um numero a aleatório de 0 a 4 
                        i = random.Next(0, 5);
                        //gera um numero a aleatório de 0 a 5 
                        j = random.Next(0, 6);
                    } while (tab[i, j] != 0);
                    tab[i, j] = cont;
                }
                    
            }
 
            InitializeComponent();
            //muda a cor do fundo para rosa
            this.BackColor = System.Drawing.Color.Pink;

            //inicia as imagens das cartas viradas para baixo
            pictureBox1.Image = pictureBox2.Image = pictureBox3.Image = pictureBox4.Image = pictureBox5.Image = imageList1.Images[0];
            pictureBox6.Image = pictureBox7.Image = pictureBox8.Image = pictureBox9.Image = pictureBox10.Image = imageList1.Images[0];
            pictureBox11.Image = pictureBox12.Image = pictureBox13.Image = pictureBox14.Image = pictureBox15.Image = imageList1.Images[0];
            pictureBox16.Image = pictureBox17.Image = pictureBox18.Image = pictureBox19.Image = pictureBox20.Image = imageList1.Images[0];
            pictureBox21.Image = pictureBox22.Image = pictureBox23.Image = pictureBox24.Image = pictureBox25.Image = imageList1.Images[0];
            pictureBox26.Image = pictureBox27.Image = pictureBox28.Image = pictureBox29.Image = pictureBox30.Image = imageList1.Images[0];


            //Barbie Vermelha e Ken Azul
            joga1.Image = imageList1.Images[18];
            joga2.Image = imageList1.Images[17];
            pont1.Text = "pontos: "+j1.ToString();
            pont2.Text = "pontos: "+j2.ToString();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        //primeira fileira
        private void pictureBox2_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 0, 0);}
        private void pictureBox3_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 0, 1);}
        private void pictureBox4_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 0, 2);}
        private void pictureBox1_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 0, 3);}
        private void pictureBox5_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 0, 4);}
        private void pictureBox6_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 0, 5);}

        //segunda fileira
        private void pictureBox12_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 1, 0);}
        private void pictureBox11_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 1, 1);}
        private void pictureBox10_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 1, 2);}
        private void pictureBox9_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 1, 3);}
        private void pictureBox8_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 1, 4);}
        private void pictureBox7_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 1, 5);}


        //terceira fileira
        private void pictureBox18_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 2, 0);}
        private void pictureBox17_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 2, 1);}
        private void pictureBox16_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 2, 2);}
        private void pictureBox15_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 2, 3);}
        private void pictureBox14_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 2, 4);}
        private void pictureBox13_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 2, 5);}

        //quarta fileira
        private void pictureBox24_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 3, 0);}
        private void pictureBox23_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 3, 1);}
        private void pictureBox22_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 3, 2);}
        private void pictureBox21_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 3, 3);}
        private void pictureBox20_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 3, 4);}
        private void pictureBox19_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 3, 5);}

        //quinta fileira
        private void pictureBox30_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 4, 0);}
        private void pictureBox29_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 4, 1);}
        private void pictureBox28_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 4, 2);}
        private void pictureBox27_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 4, 3);}
        private void pictureBox26_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 4, 4);}
        private void pictureBox25_Click(object sender, EventArgs e){
            Verifica(((PictureBox)sender), 4, 5);}

        //para reiniciar o jogo
        private void button1_Click_1(object sender, EventArgs e)
        {
            Application.Restart();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Você deve encontrar duas cartas iguais no tabuleiro. Cada par encontrado vale 1 ponto. No final o jogador que tiver mais pontos será o  vecedor. O jogo termina quando todos os pares tiverem sido encontrados. O jogador da vez é o que possui imagem colorida. A cada ponto feito, o jogador da vez recebe mais uma chance de jogar.");
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

    }
}
